Constrain the window to the minimum width for the natural height
authorTristan Van Berkom <tristan.van.berkom@gmail.com>
Sun, 11 Apr 2010 02:48:13 +0000 (22:48 -0400)
committerTristan Van Berkom <tristan.van.berkom@gmail.com>
Sun, 11 Apr 2010 02:48:13 +0000 (22:48 -0400)
GtkWindow now requests the minimum width for the natural height
of its child, or the opposite; depending on ->get_height_for_width.
Currently its not done for GTK_WINDOW_POPUP windows as the menushells
aren't working right yet.

gtk/gtkwindow.c

index 33d5dab5e4962b0a17000f692fd938f976761e6f..5d351cb4081ab2c38682167f50eca9ab85dd1a55 100644 (file)
@@ -48,6 +48,7 @@
 #include "gtkmarshalers.h"
 #include "gtkplug.h"
 #include "gtkbuildable.h"
+#include "gtkextendedlayout.h"
 #include "gtkalias.h"
 
 #ifdef GDK_WINDOWING_X11
@@ -4948,12 +4949,43 @@ gtk_window_size_request (GtkWidget      *widget,
 
   if (bin->child && gtk_widget_get_visible (bin->child))
     {
-      GtkRequisition child_requisition;
+      GtkRequisition child_requisition, child_natural;
+      gint           wfh, hfw;
       
-      gtk_widget_size_request (bin->child, &child_requisition);
 
-      requisition->width += child_requisition.width;
-      requisition->height += child_requisition.height;
+      gtk_extended_layout_get_desired_size (GTK_EXTENDED_LAYOUT (bin->child),
+                                           &child_requisition,
+                                           &child_natural);
+
+      /* TODO: Change wrapping label requisitions to desired a user intended wrap length,
+       * and make the minimum size out the minimum height for the natural-width, instead of 
+       * the minimum height for the minimum width, which is backwards */
+      if (window->type != GTK_WINDOW_POPUP)
+       {
+         if (gtk_extended_layout_is_height_for_width (GTK_EXTENDED_LAYOUT (bin->child)))
+           {
+             gtk_extended_layout_get_height_for_width (GTK_EXTENDED_LAYOUT (bin->child),
+                                                       child_natural.width,
+                                                       &hfw, NULL);
+             
+             requisition->width  += child_requisition.height;
+             requisition->height += hfw;
+           }
+         else
+           {
+             gtk_extended_layout_get_width_for_height (GTK_EXTENDED_LAYOUT (bin->child),
+                                                       child_natural.height,
+                                                       &wfh, NULL);
+             
+             requisition->width  += wfh;
+             requisition->height += child_requisition.height;
+           }
+       }
+      else
+       {
+         requisition->width  += child_requisition.width;
+         requisition->height += child_requisition.height;
+       }
     }
 }